import router from './router'
import { ElMessage, ElMessageBox } from 'element-plus'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { isHttp, isPathMatch } from '@/utils/validate'
import { useUserInfoStore } from '@/stores/userInfo'
import getPageTitle from './utils/get-page-title'
import axios from 'axios'
NProgress.configure({ showSpinner: false })

const whiteList = [
  '/login',
  `/packingMaterials`,
  `/blanking`,
  `/craft`,
  `/outsource`,
  `/sewingMachine`,
  `/particulars`,
  `/backlogOfUnfilledOrders`,
  `/analysisOfTheOrder`
]

const isWhiteList = (path) => {
  return whiteList.some((pattern) => isPathMatch(pattern, path))
}

router.beforeEach(async (to, from, next) => {
  // axios.get('/version.json').then((res) => {
  //   const version = localStorage.getItem('version')
  //   if (!version) {
  //     localStorage.setItem('version', res.data.version)
  //   }
  //   if (version !== res.data.version) {
  //     localStorage.setItem('version', res.data.version)
  //     let messageBoxTimer
  //     let countdown = 10 // 秒数
  //     ElMessageBox({
  //       showCancelButton: true,
  //       showConfirmButton: false,
  //       dangerouslyUseHTMLString: true,
  //       title: '系统提示',
  //       message: `系统有更新，将在10秒后自动更新 之前版本: ${version} 当前版本: ${res.data.version}`,
  //       type: 'warning',
  //       customClass: 'soleClass'
  //     })
  //       .then(() => {
  //         if (messageBoxTimer) clearInterval(messageBoxTimer)
  //         // 这里是 点击取消的操作（按钮位置调换）
  //       })
  //       .catch((action) => {
  //         if (messageBoxTimer) clearInterval(messageBoxTimer)
  //       })
  //     messageBoxTimer = setInterval(() => {
  //       // 获取demo元素 因为页面可能有多个提示  加唯一标识 soleClass 修改内容
  //       const domeInfo = document.querySelector('.soleClass .el-message-box__btns')
  //       if (domeInfo) {
  //         domeInfo.querySelectorAll('.confirm')?.forEach((item) => {
  //           item.remove()
  //         })
  //         domeInfo.insertAdjacentHTML(
  //           'beforeend',
  //           `<button class="confirm el-button el-button--primary el-button--default" onclick="window.location.reload()"">确认（${countdown}）</button>`
  //         )
  //       }
  //       if (countdown <= 1) {
  //         if (messageBoxTimer) clearInterval(messageBoxTimer)
  //         countdown = 10
  //         // 倒计时结束 执行事件
  //         window.location.reload()
  //         ElMessageBox.close() // 关闭弹框
  //         return
  //       }
  //       countdown -= 1
  //     }, 1000)
  //   }
  // })

  // 在显示进度条
  NProgress.start()

  // 设置整个页面的标题
  document.title = getPageTitle(to.meta.title)

  const token = sessionStorage.getItem('Authorization')
  // 如果token存在(已经登陆或前面登陆过)
  if (token) {
    // 如果请求的是登陆路由
    if (to.path === '/login') {
      // 直接跳转到根路由, 并完成进度条
      next({ path: '/index' })
      NProgress.done()
    } else {
      // 是否已经登陆
      const hasLogin = !!useUserInfoStore().userInfo.name1
      // 如果已经登陆直接放行
      if (hasLogin) {
        next()
      } else {
        // 如果还没有登陆
        try {
          // 异步请求获取用户信息(包含权限数据) ==> 动态注册用户的权限路由 => 当次跳转不可见
          await useUserInfoStore().getInfo()
          next(to) // 重新跳转去目标路由, 能看到动态添加的异步路由, 且不会丢失参数
          NProgress.done() // 结束进度条
        } catch (error) {
          // 如果请求处理过程中出错
          // 跳转到登陆页面, 并携带原本要跳转的路由路径, 用于登陆成功后跳转
          next('/login')
          // 完成进度条
          NProgress.done()
        }
      }
    }
  } else {
    // 没有token
    // 如果目标路径在白名单中(是不需要token的路径)
    if (whiteList.indexOf(to.path) !== -1) {
      // 放行
      next()
    } else {
      // 如果没在白名单中, 跳转到登陆路由携带原目标路径
      next('/login')
      // 完成进度条  当次跳转中断了, 要进行一个新的跳转了
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done()
})
